/**
 * @file Controller.h
 * @author enemy1205 (enemy1205@qq.com)
 * @brief 控制器管理头文件
 * @date 2021-09-11
 */
#pragma once
#include "CommandParser.h"
#include "Log.h"
#include "VisualMonitor.h"
#include "RMVideoCapture.h" // 驱动工业相机
#include "SerialPort.h"
// 识别模式
enum Detect_mode
{
    ARMOR_DETECT = 0U,   // 装甲模式
    RUNE_DETECT = 1U,    // 神符模式
//    DISTURB_DETECT = 3U, // 干扰模式
//    PILOT_DETECT = 4U    // 引导模式
};
class Controller {
public:
    Controller(int argc, char *argv[]);
    ~Controller();
    bool execute();//执行函数
    void debug();//调试接口
    inline void setId(uint8_t mode) { _mode = mode; } // 设置模式
private:
    CommandParser cmd;                          //命令行对象
    Logger logger;                              //创建日志对象
    GyroData gyro_data;                       //步兵/哨兵接收数据
    DataStruct send_data;                       // 发送数据
    uint8_t _mode;                             // 接收的模式
    uint8_t _detectId;                         // 当前识别模式
    uint8_t _cameraId;                         // 相机模式
    SerialPort port;                            // 串口对象
    GyroScope port_manager;                     // 串口管理对象
    std::unique_ptr<Visual> visualControl;
    std::unique_ptr<cv::VideoCapture> capture;//视频输入流
    clock_t startTime, endTime;//起始，结束时间
    int break_record = 0;//断帧记录，防止有些视频中途断帧
    void initCamera(int _id);//相机初始化
    void setCamera();   //相机模式设置
    void setDetector(); //识别模式设置
};

